﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SIM.Geo.DA;
using SIM.Geo.BE;

namespace SIM.Geo.BL
{
    public class BLPlataforma
    {
        #region Metodos
        /// <summary>
        /// Método devuelve la lista de plataforma
        /// </summary>
        /// <returns></returns>
        public List<Plataforma> ListarPlataforma()
        {
            return Accesor.ListarPlataforma();
        }

        /// <summary>
        /// Método inserta una nueva plataforma
        /// </summary>
        /// <param name="zona"></param>
        /// <returns></returns>
        public int InsertarPlataforma(Plataforma Plataforma)
        {
            int codigoNuevo = this.GenerarCodigoPlataforma();
            Plataforma.CodigoPlataforma = (short)codigoNuevo;
            return Accesor.InsertarPlataforma(Plataforma);
        }

        /// <summary>
        /// Método modifica una plataforma
        /// </summary>
        /// <param name="zona"></param>
        public void ModificarPlataforma(Plataforma Plataforma)
        {
            var PlataformaEdit = Accesor.ObtenerPlataforma(Plataforma.CodigoPlataforma);
            PlataformaEdit.CodigoPlataforma = Plataforma.CodigoPlataforma;
            PlataformaEdit.Descripcion = Plataforma.Descripcion;
            Accesor.ModificarPlataforma(PlataformaEdit);
        }

        /// <summary>
        /// Método elimina plataforma
        /// </summary>
        /// <param name="zona"></param>
        public void EliminarPlataforma(int codigoPlataforma)
        {
            var Plataforma = this.ObtenerPlataforma(codigoPlataforma);
            Accesor.EliminarPlataforma(Plataforma);
        }

        /// <summary>
        /// Método devuelve una plataforma por codigo
        /// </summary>
        /// <param name="codigoZona"></param>
        /// <returns></returns>
        public Plataforma ObtenerPlataforma(int codigoPlataforma)
        {
            return Accesor.ObtenerPlataforma(codigoPlataforma);
        }

        /// <summary>
        /// Lista Plataforma por Nombre , si usa para hacer validaciones en la App
        /// </summary>
        /// <param name="nombrePlataforma"></param>
        /// <returns></returns>
        public List<Plataforma> ListarPlataformaPorNombre(string nombrePlataforma)
        {
            return Accesor.ListarPlataformaPorNombre(nombrePlataforma);
        }
        /// <summary>
        /// Lista Plataforma por categoria muestra especial
        /// </summary>
        /// <param name="codigoCategoria"></param>
        /// <returns></returns>
        public List<Plataforma> ListarPlataformaPorCategoria(short codigoCategoria)
        {
            return Accesor.ListarPlataformaPorCategoria(codigoCategoria);
        }
        /// <summary>
        /// Método devuelve la lista para ComboBox, DropdownList, devuelve campos Value y Text
        /// </summary>
        /// <returns></returns>
        public List<ListItemInt> ObtenerListItem()
        {
            var result = Accesor.ListarPlataforma();
            return result.Select(x => new ListItemInt { Value = x.CodigoPlataforma, Text = x.Descripcion }).OrderBy(x => x.Text).ToList();
        }

        /// <summary>
        /// Método devuelve la lista plataformas por categoria
        /// </summary>
        /// <returns></returns>
        public List<ListItemInt> ObtenerListItem1(int codigoCategoria)
        {
            var result = Accesor.ListarPlataformaPorCategoria(codigoCategoria);
            return result.Select(x => new ListItemInt { Value = x.CodigoPlataforma, Text = x.Descripcion }).OrderBy(x => x.Text).ToList();
        }
        #endregion
        #region Utilidades
        /// <summary>
        /// Método que genera el codigo Plataforma
        /// </summary>
        /// <returns></returns>
        public int GenerarCodigoPlataforma()
        {
            int codigoMaximo = 1;
            var lista = Accesor.ListarPlataforma();
            if (lista.Count > 0)
            {
                codigoMaximo = lista.OrderByDescending(x => x.CodigoPlataforma).FirstOrDefault().CodigoPlataforma + 1;
            }
            return codigoMaximo;
        }
        #endregion

        #region Accesor
        private static DAPlataforma Accesor
        {
            [System.Diagnostics.DebuggerStepThrough]
            get { return new DAPlataforma(); }
        }
        #endregion
    }
}
